<?php
// $Id$

/**
 * JqEffectPath 封装来自 jqeffects 数据表的记录及领域逻辑
 */
class JqEffects extends QDB_ActiveRecord_Abstract
{
	/**
     * 模型要使用的连接类
     *
     * @var Connection
     */
    protected $_connection = null;
    
    
    
    /**
     * 构造函数
     */
    public function __construct()
    {
    	parent::__construct();
        
        // Model init function
        $this->init();
    }
    
    public function init()
    {
        if ($this->_connection == null) {
        	// Get the Connection
        	$this->_connection = Connection::getInstance();
        }
    }

    /**
     * 返回对象的定义
     *
     * @static
     *
     * @return array
     */
    static function __define()
    {
        return array
        (
            // 指定该 ActiveRecord 要使用的行为插件
            'behaviors' => '',

            // 指定行为插件的配置
            'behaviors_settings' => array
            (
                # '插件名' => array('选项' => 设置),
            ),

            // 用什么数据表保存对象
            'table_name' => 'jqeffects',

            // 指定数据表记录字段与对象属性之间的映射关系
            // 没有在此处指定的属性，QeePHP 会自动设置将属性映射为对象的可读写属性
            'props' => array
            (
                // 主键应该是只读，确保领域对象的“不变量”
                'id' => array('readonly' => true),

                /**
                 *  可以在此添加其他属性的设置
                 */
                # 'other_prop' => array('readonly' => true),

                /**
                 * 添加对象间的关联
                 */
                # 'other' => array('has_one' => 'Class'),

            ),

            /**
             * 允许使用 mass-assignment 方式赋值的属性
             *
             * 如果指定了 attr_accessible，则忽略 attr_protected 的设置。
             */
            'attr_accessible' => '',

            /**
             * 拒绝使用 mass-assignment 方式赋值的属性
             */
            'attr_protected' => 'id',

            /**
             * 指定在数据库中创建对象时，哪些属性的值不允许由外部提供
             *
             * 这里指定的属性会在创建记录时被过滤掉，从而让数据库自行填充值。
             */
            'create_reject' => '',

            /**
             * 指定更新数据库中的对象时，哪些属性的值不允许由外部提供
             */
            'update_reject' => '',

            /**
             * 指定在数据库中创建对象时，哪些属性的值由下面指定的内容进行覆盖
             *
             * 如果填充值为 self::AUTOFILL_TIMESTAMP 或 self::AUTOFILL_DATETIME，
             * 则会根据属性的类型来自动填充当前时间（整数或字符串）。
             *
             * 如果填充值为一个数组，则假定为 callback 方法。
             */
            'create_autofill' => array
            (
                # 属性名 => 填充值
                # 'is_locked' => 0,
            ),

            /**
             * 指定更新数据库中的对象时，哪些属性的值由下面指定的内容进行覆盖
             *
             * 填充值的指定规则同 create_autofill
             */
            'update_autofill' => array
            (
            ),

            /**
             * 在保存对象时，会按照下面指定的验证规则进行验证。验证失败会抛出异常。
             *
             * 除了在保存时自动验证，还可以通过对象的 ::meta()->validate() 方法对数组数据进行验证。
             *
             * 如果需要添加一个自定义验证，应该写成
             *
             * 'title' => array(
             *        array(array(__CLASS__, 'checkTitle'), '标题不能为空'),
             * )
             *
             * 然后在该类中添加 checkTitle() 方法。函数原型如下：
             *
             * static function checkTitle($title)
             *
             * 该方法返回 true 表示通过验证。
             */
            'validations' => array
            (
                'name' => array
                (
                    array('max_length', 100, 'name不能超过 100 个字符'),

                ),

                'path' => array
                (
                    array('max_length', 100, 'path不能超过 100 个字符'),

                ),


            ),
        );
    }


/* ------------------ 以下是自动生成的代码，不能修改 ------------------ */

    /**
     * 开启一个查询，查找符合条件的对象或对象集合
     *
     * @static
     *
     * @return QDB_Select
     */
    static function find()
    {
        $args = func_get_args();
        return QDB_ActiveRecord_Meta::instance(__CLASS__)->findByArgs($args);
    }

    /**
     * 返回当前 ActiveRecord 类的元数据对象
     *
     * @static
     *
     * @return QDB_ActiveRecord_Meta
     */
    static function meta()
    {
        return QDB_ActiveRecord_Meta::instance(__CLASS__);
    }


/* ------------------ 以上是自动生成的代码，不能修改 ------------------ */
    
    protected $_data =array(
    	'pageLimit' => 20
    );
    
    public function __get($name)
    {
    	if(isset($this->_data[$name])){
    		return $this->_data[$name];
    	}
    	
    	return null;
    }
    
    public function __set($prop_name, $value)
    {
    	$this->_data[$prop_name] = $value;
    }
    
    
    /**
     * 将jqeffects清空，与目录中的内容做一次同步
     * 从jqeffect目录读取jqeffects的name(文件夹名), demo_file(html或htm文件), pack_file(rar或zip文件), image_file(图像文件),然后插入到数据库中
     * @param $siteName
     */
    public function synchronizeDbToRealPath($jqEffectsResourceRoot)
    {
		try {
    		$sql = " TRUNCATE TABLE `jqeffects` ";
			if($this->_connection->execute($sql)){
				$jqEffectsFileSysInfo = Util::ListJqeffectsInfo($jqEffectsResourceRoot);
    			
    			$sql = " INSERT INTO jqeffects(name, demo_file, pack_file, image_file, illustration) VALUES ";
    			$values = array();
    			foreach($jqEffectsFileSysInfo as $name => $contents){
    				$image_file = '';
    				$demo_file = '';
    				$pack_file = '';
    				$illustration = '';
    				foreach($contents as $k => $v){
    					if(in_array($k, PublicVars::$imgFileType)){
    						$image_file = $v;
    					}else if(in_array($k, PublicVars::$htmlFileType)){
    						$demo_file = $v;
    					}else if(in_array($k, PublicVars::$packFileType)){
    						$pack_file = $v;
    					}else if(in_array($k, PublicVars::$illusFileType)){
    						$illustration = $v;
    					}
    				}
    				$values[] = " ('$name', '$demo_file', '$pack_file', '$image_file', '$illustration') ";
    			}
    			$sql .= implode(',', $values);
    			return $this->_connection->execute($sql);
			}
		}
		catch (Exception $e){
			QLog::log(__CLASS__.' '.__METHOD__.' --- '.$e->getMessage(), QLog::ERR);
			throw new Model_Exception($e->getMessage(), $e->getCode());
		}
    }
    
    public function getJqeffects($jqeffectclass = array(), $page = 0)
    {
    	try {
    		$sqlWhere = "";
    		if(!empty($jqeffectclass)){
    			$sqlWhere .= " WHERE classification IN ('" . implode("','", $jqeffectclass) ."') ";
    		}
    		
    		$sql = " SELECT * FROM jqeffects " . $sqlWhere;
    		if($page != 0){
	    		$sql2 = " SELECT COUNT(*) totalNum FROM jqeffects " . $sqlWhere;
	    		$result = $this->_connection->query($sql2);
	    		$jqeffects['totalNum'] = $result[0]['totalNum'];
	    		
    			$limit = $this->pageLimit;
    			$limitStart = ($page-1)*$limit;
    			$sql .= " LIMIT $limitStart, $limit ";
    		}
    		$jqeffects['data'] = $this->_connection->query($sql);
    		
    		return $jqeffects;
    	}catch (Exception $e){
			QLog::log(__CLASS__.' '.__METHOD__.' --- '.$e->getMessage(), QLog::ERR);
			throw new Model_Exception($e->getMessage(), $e->getCode());   		
    	}
    }
    
    public function getnJqeffectsFromDB($n)
    {
    	try {
    		$sql = " SELECT * FROM jqeffects LIMIT $n ";
    		$jqeffects = $this->_connection->query($sql);
    		
    		return $jqeffects;
    	}catch (Exception $e){
			QLog::log(__CLASS__.' '.__METHOD__.' --- '.$e->getMessage(), QLog::ERR);
			throw new Model_Exception($e->getMessage(), $e->getCode());   		
    	}
    }
    
    public function getJqeffectById($id)
    {
    	try {
    		$sql = " SELECT * FROM jqeffects WHERE id=? LIMIT 1 ";
    		$jqeffects = $this->_connection->query($sql, array($id));
    		
    		if(!empty($jqeffects)){
    			return $jqeffects[0];
    		}
    		
    		return false;
    	}catch (Exception $e){
			QLog::log(__CLASS__.' '.__METHOD__.' --- '.$e->getMessage(), QLog::ERR);
			throw new Model_Exception($e->getMessage(), $e->getCode());   		
    	}
    }
    
    public function getAllClassification()
    {
        try {
    		$sql = " SELECT DISTINCT classification FROM jqeffects ";
    		$classification = $this->_connection->query($sql);		dump($classification);
    		
    		if(!empty($classification)){
    			foreach ($classification as $k=>$v){
    				$classification[$k] = $v['classification'];
    			}
    			return $classification;
    		}
    		
    		return false;
    	}catch (Exception $e){
			QLog::log(__CLASS__.' '.__METHOD__.' --- '.$e->getMessage(), QLog::ERR);
			throw new Model_Exception($e->getMessage(), $e->getCode());   		
    	}   	
    }
    

}

